"""
字符串的定义：字符串是表示文本的数据类型，在puthon中我们用  引号表示
注意：相同引号不能嵌套，但是可以混合使用后或者使用转义字符

a = "I'm Tom"     # 双引号中可以包含单引号
print(a)

b = 'Tom said: "I am Tom"'   #单引号中可以包含双引号
print(b)

c = 'Tom said: "i\'m Tom"'   # 转义字符来处理冲突使用 \
print(c)

d = '''Tom said:"i'm Tom"'''   #三引号可以自由的包含引号
print(d)
"""

"""
转义字符：
\':单引号
\"：双引号
\n：换行
\t：制表符   print("Name:\tAllen")
"""



"""
下标：字符串中，每一个字符都有一个位置编号（从0 开始），被称为下标。
字符串是不可变的数据类型，不能通过下标修改值
在字符串的文本中，空格也是占一位
通过下标取值：含头不含尾
"""
"""
语法格式：
变量 = [start:end:step]
start:开始的索引值，从左往右，从0开始，从右往左是从-1开始
end: 结束的索引值
step:步长：一般默认是1 选择的是截取的长度
"""

# str1 = "Helto world"

# print(str1[5])

# print(str1[0:3])  #0-2

# print(str1[3:7])   #取中间的值

# print(str1[2:])   #从第二位取值到最后


# str2 = "1234567890"
# print(str2[::2])   #根据步长来取值

# print(str2[::-1])   #将字符串进行反转

#
# name = "菜某坤"
# L = "两年半"
# C = "及你太美"
#
# print(f"{name}:\n[练习时长:{L}]\n[成名曲：{C}]")


"""
字符串的常用方法：
字符串是不可变的，所有的操作都是不更改原字符串，而是生成一个新的字符串
"""

#len返回字符串的长度
# s = "1234456789"
# print(len(s))


"""
查找字符串：
"""

# find(sub)   #返回首次出现的位置，当找不到的时候，返回-1

# x = "qwertyuiopasdfghjklzxcvbnmmmm"

# print(x.find("q"))   #从下角标的第0位开始


# index：返回首次出现的位置，同find,当找不到元素的时候，返回的是ValueError

# x = "qwertyuiopasdfghjklzxcvbnmmmm"
# print(x.index("q"))  #返回0
# print(x.index("4"))  # ValueError: substring not found




# x = "qwertyuiopasdfghjklzxcvbnmmmmq"

# rfind：返回最后一次出现的位置，如果没找到返回-1
# print(x.rfind("q"))
# print(x.rfind("4"))



# rindex:同rfind 找不到会报错
# x = "qwertyuiopasdfghjklzxcvbnmmmmq"
#
# print(x.rindex("4"))   # ValueError: substring not found


#使用find在制定的范围内去查找,找不到会返回-1

# x = "qwertyuiopasdfghjklzxcvbnmmmmq"
#
# print(x.find('w',9,10))







# 判断方法：（返回布尔值 True & False）
"""
startswith(prefix)   : 是否以某内容开头
print('hello'.startswith('he'))  # True
print('hello'.startswith('e'))   # False
"""


"""
endswith(suffix) #查看是否以某内容结尾
print('hello'.endswith("lo"))  # True
print('hello'.endswith("l"))  # False

"""

"""
isalpha():是否全是英文字母

print('abc'.isalpha())  # True

print('a1bc'.isalpha())    #False

"""
"""
isdigit:是否全为数字

print('123'.isdigit())  # True
print('123a'.isdigit())  # False
"""


"""
isalnum:是否为字母以及数字以及汉字
print('ab13'.isalnum()) # True
print('ab13 '.isalnum())  #返回False
"""


"""

#检查是否为空白的字符

print(' '.isspace())  #True
print(' 1'.isspace())  #False
"""



"""
计数：count(sub)
返回子串在字符串中出现的”非重叠的次数“
# text = "hello hello world"
# print(text.count('hello'))  #返回2
# 
# print(text.count("l"))   #返回5
"""

"""
replace:替换 
replace(old，new,count)

s = 'i love python and python is great'
#全部替换
# print(s.replace('python',"java"))   #  i love java and java is great

#只替换一次
print(s.replace("python",'java',1))    # i love java and python is great 

"""



"""
# 分割
split():按分隔符进行分割，从左开始
rsplit():从右开始分割
splitlines():按行开始分割（识别、\n）

print('a,b,c'.split(','))  #返回的是一个列表：['a', 'b', 'c']

print('a,b,c'.split(',',1))   # 只分割一次  ['a', 'b,c']

print('hello\nworld'.splitlines())  #识别其中的\n  ['hello', 'world']
"""


"""
大小写转换：
capitalize:首字母大写，其余的小写
print('hello'.capitalize())   # Hello

upper():全部大写
print('hello'.upper())   # HELLO
lower():全部小写
print('HELLO'.lower())   # hello

title():每个单词的首字母大写
print('good morning'.title())  # Good Morning
"""


"""
填充与对齐
ljust(width,char)左对齐，右侧填充
print('monday'.ljust(10,'+'))
rjust(width,char)：右对齐，左侧填充
print('Tuesday'.rjust(10,"-"))
center(width,char)：居中，两边补充
print('wednesday'.center(20,'*'))  # *****wednesday******
"""

"""
去除空白：
strip():去除两边

s = "    apple         "
print(s.strip())   # apple  去除两边
print(s.lstrip())     #去除左边的空格
print(s.rstrip())  #去除右边的空格
"""

"""
拼接：
join:将列表等可迭代的对象拼接成字符串
lst = ['a','b','c']
result = '-'.join(lst)   # a-b-c
print(result)
"""


"""

字符串的编码与解码：
python3中编码格式默认的是Unicode(支持全球的文字)
常见的编码格式：UTF-8（1~4字节）、GBK（中文是两个字节）
ord(char)   : 字符转换为Unicode编码   print(ord('A'))   # 65
chr(code)  :   编码转变为字符    print(chr(66))   # B
str.encode(encoding)  :  字符串转换为字节   bytes



# 编码：
# print('你'.encode('utf-8'))   # b'\xe4\xbd\xa0'
# print('你'.encode('gbk'))      # b'\xc4\xe3'

# 解码

# data = b'\xe4\xbd\xa0'
#
# print(data.decode('utf-8'))



#错误的解码会导致乱码

# utf8_data = '你好'.encode('utf-8')
# print(utf8_data.decode('gbk'))   # 浣犲ソ

"""


"""
字符串比较
1.比较操作符 
==   / !=:  比较内容是否相同
is / is not   :比较是否为同一个对象（内存地址）
# a = 'hello'
# b = 'hello'
# print(a == b)   # True
# print(a is b)    # True   python会自动地缓存小的字符串，可能指的是同一个对象
"""

"""
成员运算符： in / not in
建议：判断是否存在有限使用 in  简洁

判断子串是否存在

# msg = 'hello'
# char = 'e4'

#方法1：使用in
# if char in msg:
#     print('字符存在')

#使用find方法
# if msg.find(char) != -1:
#     print("存在")


# if 'x' not in msg  :
#     print('x 不存在')
"""


"""
可变数据类型：   str  int   tuple    float
不可变数据类型：   list    dict    set

"""